package com.mojian.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.mojian.entity.PointsRecord;
import com.mojian.entity.UserPoints;

import java.util.List;
import java.util.Map;

/**
 * 积分服务接口
 */
public interface PointsService {

    /**
     * 获取用户积分信息
     * @return 用户积分信息
     */
    UserPoints getUserPoints();

    /**
     * 获取用户积分记录
     * @param pageNum 页码
     * @param pageSize 每页数量
     * @param userId 用户ID
     * @return 积分记录分页
     */
    Page<PointsRecord> getPointsRecords(Integer pageNum, Integer pageSize, Long userId);

    /**
     * 增加积分
     * @param userId 用户ID
     * @param points 积分数量
     * @param type 积分类型
     * @param relatedId 关联ID
     * @param description 描述
     * @return 是否成功
     */
    boolean addPoints(Long userId, Integer points, Integer type, Long relatedId, String description);

    /**
     * 消费积分
     * @param userId 用户ID
     * @param points 积分数量
     * @param type 积分类型
     * @param relatedId 关联ID
     * @param description 描述
     * @return 是否成功
     */
    boolean consumePoints(Long userId, Integer points, Integer type, Long relatedId, String description);

    /**
     * 签到奖励积分
     * @param userId 用户ID
     * @return 是否成功
     */
    boolean signInReward(Long userId);

    /**
     * 检查用户是否有足够的积分
     * @param userId 用户ID
     * @param points 所需积分
     * @return 是否有足够积分
     */
    boolean hasEnoughPoints(Long userId, Integer points);
    
    /**
     * 调试: 获取所有积分记录
     * @return 所有积分记录
     */
    List<Map<String, Object>> debugGetAllPointsRecords();

    /**
     * 调试: 获取指定用户的积分记录
     * @param userId 用户ID
     * @return 指定用户的积分记录
     */
    List<PointsRecord> debugGetUserPointsRecords(Long userId);

    /**
     * 根据用户ID获取积分信息
     * @param userId 用户ID
     * @return 用户积分信息
     */
    UserPoints getUserPointsById(Long userId);
} 